package com.zhala.system.service;

import com.zhala.common.core.domain.CommonResult;
import com.zhala.common.core.domain.PageResult;
import com.zhala.system.domain.ZlSteelBigPipe;
import com.zhala.system.domain.ZlSteelPipe;
import com.zhala.system.domain.vo.*;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 管节Service接口
 *
 * @author ruoyi
 * @date 2024-11-11
 */
public interface IZlSteelPipeService {
    /**
     * 查询管节
     *
     * @param CREATOR 管节主键
     * @return 管节
     */
    public ZlSteelPipe selectZlSteelPipeByCREATOR(String CREATOR);

    /**
     * 查询管节列表
     *
     * @param zlSteelPipe 管节
     * @return 管节集合
     */
    public List<ZlSteelPipe> selectZlSteelPipeList(ZlSteelPipe zlSteelPipe);

    /**
     * 新增管节
     *
     * @param zlSteelPipe 管节
     * @return 结果
     */
    public int insertZlSteelPipe(ZlSteelPipe zlSteelPipe);

    /**
     * 修改管节
     *
     * @param zlSteelPipe 管节
     * @return 结果
     */
    public int updateZlSteelPipe(ZlSteelPipe zlSteelPipe);

    /**
     * 批量删除管节
     *
     * @param CREATORs 需要删除的管节主键集合
     * @return 结果
     */
    public int deleteZlSteelPipeByCREATORs(String[] CREATORs);

    /**
     * 删除管节信息
     *
     * @param CREATOR 管节主键
     * @return 结果
     */
    public int deleteZlSteelPipeByCREATOR(String CREATOR);


    CommonResult<Boolean> settings(SteelPipeSettingsReqVO reqVO);


    CommonResult<Boolean> blanking(SteelPipeBlankingReqVO reqVO);

   CommonResult<Boolean> blankingUpdate(SteelPipeBlankingReqVO reqVO);
    /**
     * 处理钢管卷板工序的相关信息
     *
     * @param reqVO 钢管卷板工序请求对象，包含卷板工序所需的信息
     * @return 返回一个CommonResult对象，包含操作结果的布尔值
     */
    CommonResult<Boolean> coil(SteelPipeCoilReqVO reqVO,Boolean isUpdate);

    /**
     * 执行钢管的圈圆操作
     *
     * @param reqVO 钢管圈圆请求对象，包含圈圆操作的相关信息
     * @return 返回一个通用结果对象，表示圈圆操作是否成功
     */
    CommonResult<Boolean> plateCircle(SteelPipePlateCircleReqVO reqVO);

    /**
     * 纵缝焊接操作
     * <p>
     * 此方法负责将焊接相关信息更新到数据库中，包括焊接用户、焊接开始和结束时间等
     * 它首先验证请求的合法性，然后更新钢管的焊接信息，并保存到数据库
     *
     * @param reqVO 包含焊接请求信息的对象
     * @return 返回一个通用结果对象，表示焊接操作是否成功
     */
    CommonResult<Boolean> weld(SteelPipeWeldReqVO reqVO,Boolean isUpdate);

    /**
     * 处理废品操作
     *
     * @param reqVO 废品操作的请求对象，包含废品操作的相关信息
     * @return 返回一个CommonResult对象，包含操作结果的布尔值
     */
    CommonResult<Boolean> scrap(PipeScrapReqVO reqVO);

    /**
     * 获取管节信息
     * 根据管节ID查询并返回管节的详细信息如果未找到对应的管节，则返回错误信息
     *
     * @param id 管节ID，用于查询特定的管节信息
     * @return CommonResult<SteelPipeRespVO> 包含管节信息的响应对象，或者包含错误信息的响应对象
     */
    CommonResult<SteelPipeRespVO> info(String id, Integer type);

    /**
     * 管节待办或已完成列表
     *
     * @param reqVO 分页查询条件对象，包含页码、页面大小、月份等查询参数
     * @return 返回一个分页结果对象，包含管道信息列表和总记录数
     */
    PageResult<List<PipePageRespVO>> page(PipePageReqVO reqVO);

     /**
     * 获取所有大管列表
     *
     * @param reqVO 分页查询条件对象，包含页码、页面大小、月份等查询参数
     * @return 返回一个分页结果对象，包含管道信息列表和总记录数
     */
    PageResult<List<ZlSteelBigPipe>> newPage(PipeNewPageReqVO reqVO);

    /**
     * 获取未使用的钢管列表
     * <p>
     * 该方法通过调用zlSteelPipeMapper中的unUsePipe方法来获取当前未被使用的钢管（ZlSteelPipe）列表
     * 主要用于展示可用的钢管资源，以便进行进一步的处理或展示
     *
     * @return 一个包含未使用钢管的列表，如果当前没有可用的钢管，则返回一个空列表
     */
    CommonResult<List<ZlSteelPipe>> unUsePipe();

    /**
     * 获取最近六个月的管道月统计信息
     * <p>
     * 本方法用于统计最近六个月（包括当前月）的管道相关数据
     * 它首先计算出五个月前的日期，并获取该月的第一天作为起始日期，
     * 然后获取当前月的最后一天作为结束日期接下来，调用Mapper层的方法
     * 获取在这段时间内的管道月统计信息，并将结果封装进CommonResult对象中返回
     *
     * @return 返回一个包含管道月统计信息列表的CommonResult对象
     */
    CommonResult<List<PipeMonthStatisticsVO>> monthsStatistics(Boolean fullMonth);

    /**
     * 管节已完成数量和报废数量统计
     * 根据请求参数中的月份和钢管编号，统计钢管的状态信息
     * 如果指定了月份，则获取该月份的开始和结束日期，否则月份统计将不被执行
     *
     * @param reqVO 请求参数对象，包含可选的月份和钢管编号
     * @return 返回一个通用结果对象，包含统计结果
     */
    CommonResult<StatusStatisticsRespVO> statusStatistics(StatusReqVO reqVO);

    /**
     * 统计指定月份的钢管相关信息
     * 如果请求中未提供月份，则默认为当前月份
     * 该方法首先计算出指定月份的开始和结束时间，然后调用Mapper层方法进行统计数据的查询
     * 最后，根据查询结果和材料列表，匹配并生成最终的统计结果
     *
     * @param reqVO 统计请求对象，可能包含需要统计的月份
     * @return 返回包含统计结果的CommonResult对象
     */
    CommonResult<List<PipeStatisticsRespVO>> statistics(StatisticsReqVO reqVO);

    /**
     * 根据大管节ID获取钢管道响应对象列表
     * 此方法首先根据大管节ID查询相关的钢管道实体，然后为每个实体创建一个响应对象，
     * 并复制属性，最后查询与每个管节相关的钢板列表并设置到响应对象中
     *
     * @param bigPipeId 大管节ID，用于查询相关的钢管道实体
     * @return SteelPipeRespVO对象列表，包含与大管节ID相关的所有钢管道信息
     */
    List<SteelPipeRespVO> listByPipeId(String bigPipeId);


    /**
     * 获取管道完成情况的静态信息
     * <p>
     * 此方法通过调用mapper层的pipCompleteStatic方法来获取管道完成情况的静态信息，
     * 并将其封装在CommonResult对象中返回成功结果
     *
     * @return CommonResult<PipeCompleteVO> 返回一个包含管道完成情况静态信息的成功结果对象
     */
    CommonResult<PipeCompleteVO> pipCompleteStatic();


    /**
     * 月强度统计
     *
     * @return
     */
    CommonResult<List<PipeMonthStatisticsVO>> qdStatistics(boolean fullMonth);


     /**
     * 获取工艺信息概述
     * 该方法汇总了不同工艺阶段的数量信息，包括卷板工艺、纵缝焊接、环缝焊接和防腐处理的数量
     * 这些信息用于提供对当前生产状况的概览
     *
     * @return CommonResult<PipeProcedureInfo> 包含各种工艺数量信息的 PipeProcedureInfo 对象
     */
     CommonResult<PipeProcedureInfo> procedureInfo();
}
